import { login, getUserInfo, getUserDetailById } from '@/api/user.js'
import { getToken, setToken, removeToken, setTime } from '@/utils/auth'
import { resetRouter } from '@/router'
const state = {
  // token: null
  // 直接从cookie里面获取
  token: getToken(),
  userInfo: {}
}
const mutations = {
  // 默认传入两个参数，data是外部传入的登录表单
  setToken(state, data) {
    // 1、 修改时数据要存到cookies 持久化
    setToken(data)
    // 2、存放和在state刷新一样方便vue使用
    state.token = data
  },
  removeToken(state) {
    state.token = null
    removeToken()
  },
  // 设置 用户信息
  setUserInfo(state, data) {
    state.userInfo = { ...data }
  },
  // 移出用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  async login(store, data) {
    try {
      // 1、发起请求
      // 两个参数
      const res = await login(data)
      // console.log('这里成功了')
      // console.log(res)
      // console.log(res.data.data)
      // const token = res.data.data
      // 2、接收外部传入的token值
      store.commit('setToken', res)

      // 登录成功记录登录时的时间
      setTime()
    } catch (error) {
      console.log('这里报错了')
      console.log(error)
    }
  },
  async getUserInfo(store) {
    // 获取基本信息 和 详情
    const simpleData = await getUserInfo()
    const detail = await getUserDetailById(simpleData.userId)
    const data = {
      ...simpleData, ...detail
    }
    store.commit('setUserInfo', data)
    // 获取用户资料时，return 数据方便调用的时候直接使用data
    return data
  },
  // 登出
  logout(store) {
    // 删除token，不仅删除vuex中的还删除了缓存中的
    store.commit('removeToken')
    // 删除用户资料
    store.commit('removeUserInfo')
    // 清空后来添加的路由配置
    resetRouter()
    // 清空菜单配置
    // 如果要调用兄弟之间的mutations，需要添加第三个参数，指定查找模块是以根目录作为起点
    store.commit('permission/setRoutes', [], {
      root: true
    })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions

}
